package com.cogent.dao.orm;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.cogent.dao.domain.Pagination;
import com.cogent.dao.domain.ParamDomain;
import com.cogent.dao.domain.TableInfoDomain;

public interface DBOperator {
	
	//打开数据库连接
	public void openDB();
	
	//关闭数据库连接
	public void closeDB();
	
	/**
	 * 执行SQL语句
	 * @param sql 待执行的SQL语句
	 * @param param 待绑定的参数变量
	 */
	public void executeSql(String sql, List<ParamDomain> param);
	
	/**
	 * 执行SQL语句
	 * @param sql待执行的SQL语句
	 */
	public void executeSql(String sql);
	
	/**
	 * 按主键查询数据
	 * @param sql 待执行的SQL
	 * @param queryList 待绑定的参数变量
	 * @return 列名，列值的键值对
	 */
	public HashMap<String, Object> getByID(String sql, List<ParamDomain> queryList);
	
	/**
	 * 执行查询SQL，只获取第一行
	 * @param sql 待执行SQL
	 * @return 返回第一行，格式为列名，列值的键值对
	 */
	public HashMap<String, Object> getOneRow(String sql);
	
	/**
	 * 执行查询SQL，返回多行
	 * @param sql 待执行的SQL
	 * @param queryList 待绑定的参数变量
	 * @return 返回多行，每一行为列名，列值的键值对
	 */
	public List<HashMap<String, Object>> query(String sql,  List<ParamDomain> queryList);
	
	public Pagination queryPagination(String sql,  List<ParamDomain> queryList, String order, int page, int pageSize);
	
	/**
	 * 执行查询SQL，返回多行
	 * @param sql 待执行的SQL
	 * @return 返回多行，每一行为列名，列值的键值对
	 */
	public List<HashMap<String, Object>> query(String sql);	
	
	public Pagination queryPagination(String sql, String order, int page, int pageSize);
	
	
	/**
	 * 开启事务
	 */
	public void beginTran();
	
	/**
	 * 提交事务
	 */
	public void commitTran();
	
	/**
	 * 回滚事务
	 */
	public void rollbackTran();	
	
	/**
	 * 按表名获取字段信息
	 * @param tableName 表名
	 * @return 表字段对应信息
	 */
	public TableInfoDomain getColumnInfo(String tableName);
	
	public Map getDBFieldMappedType();
	
	public String getUserName();
	
	public String getTableName(String sql);		
}
